﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FSY.Components.DataProvider;
using FSY.API.CacheManager;
using FSY.API.Utilities;
using FSY.Globals;
namespace FSY.Components.Entities
{
    public class Fsy_RolePermissionController
    {
        private static int InsertDeleteUpdate(Fsy_RolePermission rolePermis, DataProviderAction action)
        {
            Fsy_Cache.RemoveCache(cacheRolePermisAll);
            Fsy_Cache.RemoveCache(cacheRolePermissByRoleID);  
            return Fsy_DataProvider.Instance.RolePermission_AddDeleteUpdate(rolePermis, action);
        }
        public static int Insert(Fsy_RolePermission rolePermis)
        {
            return InsertDeleteUpdate(rolePermis, DataProviderAction.Insert);
        }
        public static int Delete(Fsy_RolePermission rolePermis)
        {
            return InsertDeleteUpdate(rolePermis, DataProviderAction.Delete);
        }
        public static int Update(Fsy_RolePermission rolePermis)
        {
            return InsertDeleteUpdate(rolePermis, DataProviderAction.Update);
        }

        private static string cacheRolePermisAll = "allRolePermis";
        private static object objlock = new object();
        public static List<Fsy_RolePermission> GetAllRolePermission()
        {
            List<Fsy_RolePermission> lsRolePermission = new List<Fsy_RolePermission>();
            lock (objlock)
            {
                lsRolePermission = (List<Fsy_RolePermission>)Fsy_Cache.GetCache(cacheRolePermisAll);
                if (lsRolePermission == null)
                {
                    lsRolePermission = Fsy_DataProvider.Instance.RolePermission_GetListAll();
                    Fsy_Cache.SetCache(cacheRolePermisAll, lsRolePermission, Fsy_Config.SlidingExpiration());
                    return lsRolePermission;
                }
            }
            return lsRolePermission;
        }

        public static Fsy_RolePermission GetUserByRoleIDAndPermissID(int roleID,int permissID)
        {
            List<Fsy_RolePermission> ls = GetAllRolePermission();
            foreach (Fsy_RolePermission rolePermission in ls)
            {
                if (rolePermission.RoleID == roleID && rolePermission.PermissionID == permissID)
                {
                    return rolePermission;
                }
            }
            return null;
        }
        private static string cacheRolePermissByRoleID = "RolePermissByRoleID";
        public static List<Fsy_RolePermission> GetRolePermissByRoleID(int roleID)
        {
            List<Fsy_RolePermission> lsRolePermiss = new List<Fsy_RolePermission>();
            lock (objlock)
            {
                lsRolePermiss = (List<Fsy_RolePermission>)Fsy_Cache.GetCache(cacheRolePermissByRoleID);
                if (lsRolePermiss == null)
                {
                    lsRolePermiss = Fsy_DataProvider.Instance.RolePermission_GetListAll();
                    Fsy_Cache.SetCache(cacheRolePermissByRoleID, lsRolePermiss, Fsy_Config.SlidingExpiration());
                    return lsRolePermiss;
                }
            }
            return lsRolePermiss;
        }        
    }
}
